SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [dbo].[paActualizarTransferencia] 

@IdTransferencia INT,
@Tipo INT,
@Licencia INT,
@Ejecutar VARCHAR(1)

AS
SET NOCOUNT ON
DECLARE @Error INT
SET @Error = 0 

BEGIN TRANSACTION

-- Chequeo si cambio el tipo
DECLARE @TipoTransferencia INT
SELECT @TipoTransferencia = (SELECT Tipo FROM tb_TransferenciasDeReestructura WHERE IdTransferencia = @IdTransferencia)

IF @Tipo <> @TipoTransferencia BEGIN

	-- Si viene de Disponibilidad, borro la plaza a abrir
	IF @TipoTransferencia = 17 BEGIN
		DECLARE @PlazaFutura INT
		SELECT @PlazaFutura = (SELECT PlazaFutura FROM tb_AltasTransferencia WHERE Transferencia = @IdTransferencia)
		DELETE FROM tb_AltasTransferencia WHERE Transferencia = @IdTransferencia
		DELETE FROM tb_AperturasDeReestructura WHERE IdAperturaReestructura = @PlazaFutura
		SET @Error = @@Error
		IF @Error <> 0 GOTO Salir
	END

	-- Si cambia a Disponibilidad, genero la Plaza Destino
	-- Borro las Alta de transferencias
	IF @Tipo = 17 BEGIN
		DELETE FROM tb_AltasTransferencia WHERE Transferencia = @IdTransferencia
		SET @Error = @@Error
		IF @Error <> 0 GOTO Salir

		DECLARE @IdPlaza INT
		DECLARE @IdDivision INT
		DECLARE @Plaza INT
		DECLARE @FechaVigencia DATETIME
		DECLARE @Reestructura INT
		SELECT @FechaVigencia = FechaVigencia, @Reestructura = IdReestructura FROM tb_Reestructuras R INNER JOIN tb_TransferenciasDeReestructura T ON R.IdReestructura = T.Reestructura WHERE T.IdTransferencia = @IdTransferencia
		SELECT @Plaza = (SELECT Plaza FROM tb_BajasDeTransferencia WHERE Transferencia = @IdTransferencia)

		-- Existe una division para Disponibilidad?
		IF EXISTS(SELECT top 1 IdDivision  FROM tb_Divisiones D INNER JOIN tb_Suborganizaciones SO ON D.IdSuborg = SO.IdSuborganizacion INNER JOIN tb_Plazas P ON P.Organizacion = SO.Org WHERE P.IdPlaza = @Plaza AND D.Division = 'N') BEGIN
			SELECT @IdDivision = (SELECT D.IdDivision FROM tb_Divisiones D INNER JOIN tb_Suborganizaciones SO ON D.IdSuborg = SO.IdSuborganizacion INNER JOIN tb_Plazas P ON P.Organizacion = SO.Org WHERE P.IdPlaza = @Plaza AND D.Division = 'N')
		END
		ELSE BEGIN
			INSERT tb_Divisiones
				SELECT '', D.IdSubOrg, D.Descripcion, D.EsGrupo, D.Curso, 'N', D.GrupoCarreras, D.Turno, @FechaVigencia, 'N', Null, P.CUISE, Null, Null
				FROM tb_Plazas P INNER JOIN tb_Divisiones D ON D.IdDivision = P.Division WHERE P.IdPlaza = @Plaza
			SET @Error = @@Error
			IF @Error <> 0 GOTO Salir
				SELECT @IdDivision = @@IDENTITY
			END

			-- Creo la plaza de destino
			INSERT tb_AperturasDeReestructura
				SELECT '', @reestructura, P.Organizacion, P.Suborganizacion, P.Funcion, P.Asignatura, @IdDivision, Null, P.Turno, @FechaVigencia, 1, P.Horas, P.NormaCreacion, 'N', Null, Null,
				P.Sistema, P.RegimenLaboral, P.Financiamiento, P.Presupuesto, P.Finalidad, P.TipoDeFuncion, P.RegimenSalarial, P.RegimenSuplencias, P.RegimenDesigna, 18, P.CargoSalarialDefault, Null, Null, Null, Null, 12, Null
				FROM tb_BajasDeTransferencia BT INNER JOIN tb_Plazas P ON P.IdPlaza = BT.Plaza WHERE Plaza = @Plaza AND Transferencia = @IdTransferencia
			SET @Error = @@Error
			IF @Error <> 0 GOTO Salir
			SELECT @IdPlaza = @@IDENTITY
			
			INSERT INTO tb_AltasTransferencia (Transferencia, PlazaActual, PlazaFutura, Estado, TipoAlta)
				VALUES(@IdTransferencia, Null, @IdPlaza, 12, 13)
			SET @Error = @@Error
			IF @Error <> 0 GOTO Salir
	END

	-- Si cambia a Baja, borro las Altas de transferencias
	IF @Tipo = 12 BEGIN
		DELETE FROM tb_AltasTransferencia WHERE Transferencia = @IdTransferencia
		SET @Error = @@Error
		IF @Error <> 0 GOTO Salir
	END

	-- Si cambia a Reubicacion, borro las Altas de transferencias
	IF @Tipo = 16 BEGIN
		DELETE FROM tb_AltasTransferencia WHERE Transferencia = @IdTransferencia
		SET @Error = @@Error
		IF @Error <> 0 GOTO Salir
	END

	-- Si cambia a Mov Extraordinario, borro las Altas de transferencias
	IF @Tipo = 18 BEGIN
		DELETE FROM tb_AltasTransferencia WHERE Transferencia = @IdTransferencia
		SET @Error = @@Error
		IF @Error <> 0 GOTO Salir
	END

	-- Si viene de Transferencia, borro la plaza a abrir
	IF @TipoTransferencia = 15 BEGIN
		DELETE FROM tb_BajasDeTransferencia WHERE Transferencia = @idtransferencia AND IdBajaTransferencia NOT IN(SELECT MIN(IdBajaTransferencia) FROM tb_BajasDeTransferencia WHERE Transferencia = @idtransferencia)
		DELETE FROM tb_AltasTransferencia WHERE Transferencia = @IdTransferencia
		SET @Error = @@Error
		IF @Error <> 0 GOTO Salir
	END
END

UPDATE tb_TransferenciasDeReestructura SET Tipo = @Tipo, Licencia = @Licencia, Ejecutar = @Ejecutar WHERE IdTransferencia = @IdTransferencia
SET @Error = @@Error
IF @Error <> 0 GOTO Salir

Salir:
IF @Error = 0 
	COMMIT TRANSACTION
ELSE
	ROLLBACK TRANSACTION
GO
GRANT EXECUTE ON  [dbo].[paActualizarTransferencia] TO [Reestructura]
GO
